/************************************
 *
 *        KRTS 内核插件管理器
 *
 ***********************************/

#ifndef PLUGINMANAGEMENT_H
#define PLUGINMANAGEMENT_H

#include "KitharaPluginBase.h"

class PluginManagement
{
public:
    // 单例模式
    static PluginManagement& GetInstance()
    {
        static PluginManagement instance;
        return instance;
    }

    // 插件注册
    bool RegisterPlugin();

    // 插件注销
    bool UnRegisterPlugin() const;

    // 获取插件的指针
    [[nodiscard]] KSHandle GetPlugin(const char* chr ) const;

    PluginManagement(const PluginManagement&) = delete;

    PluginManagement& operator=(const PluginManagement&) = delete;

private:
    PluginManagement();
    ~PluginManagement();

private:
    struct PluginInfo
    {
        KSHandle handle;            // 插件句柄
        const char name[20];        // 插件名称
        int version;                // 插件版本
    };

    static constexpr int PLUAIN_COUNT {2};                  // 插件数量
    PluginInfo plugin_info_[PLUAIN_COUNT]{};                //  插件句柄

};


#endif //PLUGINMANAGEMENT_H
